/**
 * 数据分析页面 - 实时数据更新
 * 从后端API获取实时传感器数据并更新页面显示
 */

class RealtimeAnalysisUpdater {
    constructor() {
        this.updateInterval = 5000; // 5秒更新一次
        this.intervalId = null;
        this.isActive = false;
    }

    /**
     * 开始自动更新
     */
    start() {
        if (this.isActive) {
            return;
        }
        
        console.log('[实时分析] 启动自动更新...');
        this.isActive = true;
        
        // 立即更新一次
        this.updateData();
        
        // 设置定时更新
        this.intervalId = setInterval(() => {
            this.updateData();
        }, this.updateInterval);
    }

    /**
     * 停止自动更新
     */
    stop() {
        if (!this.isActive) {
            return;
        }
        
        console.log('[实时分析] 停止自动更新');
        this.isActive = false;
        
        if (this.intervalId) {
            clearInterval(this.intervalId);
            this.intervalId = null;
        }
    }

    /**
     * 从API获取实时数据
     */
    async fetchRealtimeData() {
        try {
            const response = await fetch('/api/realtime-data');
            const result = await response.json();
            
            if (result.success) {
                return result.data;
            } else {
                console.error('[实时分析] API返回错误:', result.error);
                return null;
            }
        } catch (error) {
            console.error('[实时分析] 获取数据失败:', error);
            return null;
        }
    }

    /**
     * 更新数据
     */
    async updateData() {
        const data = await this.fetchRealtimeData();
        
        if (!data || !data.data) {
            console.warn('[实时分析] 无有效数据');
            return;
        }

        // 更新页面显示
        this.updateOccupancy(data.data);
        this.updateTemperature(data.data);
        this.updateEnvironmentMetrics(data.data);
    }

    /**
     * 更新当前人数显示
     */
    updateOccupancy(data) {
        if (!data.occupancy) {
            return;
        }

        const occupancyNumber = document.querySelector('#analysis .occupancy-number');
        if (occupancyNumber) {
            const count = data.occupancy.current_count || 0;
            occupancyNumber.textContent = count;
            
            // 添加动画效果
            occupancyNumber.classList.add('update-flash');
            setTimeout(() => {
                occupancyNumber.classList.remove('update-flash');
            }, 500);
        }

        // 更新摘要中的人数
        if (data.summary && data.summary.occupancy !== undefined) {
            const summaryOccupancy = document.querySelector('#analysis .summary-occupancy');
            if (summaryOccupancy) {
                summaryOccupancy.textContent = data.summary.occupancy;
            }
        }
    }

    /**
     * 更新温度显示
     */
    updateTemperature(data) {
        if (!data.sensors || !data.sensors.temperature) {
            return;
        }

        // 计算平均温度
        const temps = data.sensors.temperature;
        const avgTemp = (temps.S1_Temp + temps.S2_Temp + temps.S3_Temp + temps.S4_Temp) / 4;

        // 更新主要温度显示
        const metricValue = document.querySelector('#analysis .metric-large .metric-value');
        if (metricValue) {
            metricValue.textContent = `${avgTemp.toFixed(1)}°`;
            
            // 添加动画效果
            metricValue.classList.add('update-flash');
            setTimeout(() => {
                metricValue.classList.remove('update-flash');
            }, 500);
        }

        // 更新温度状态
        const metricStatus = document.querySelector('#analysis .primary-metrics .metric-status');
        if (metricStatus) {
            let status = '舒适';
            if (avgTemp > 28) {
                status = '热';
            } else if (avgTemp < 20) {
                status = '冷';
            }
            metricStatus.textContent = status;
        }

        // 更新环境指标网格中的体感温度
        const tempMetricValue = document.querySelector('#analysis .temp-metric .metric-value');
        if (tempMetricValue) {
            tempMetricValue.textContent = `${avgTemp.toFixed(0)}°`;
        }

        const tempMetricStatus = document.querySelector('#analysis .temp-metric .metric-status');
        if (tempMetricStatus) {
            let status = '舒适';
            if (avgTemp > 28) {
                status = '热';
            } else if (avgTemp < 20) {
                status = '冷';
            }
            tempMetricStatus.textContent = status;
        }
    }

    /**
     * 更新环境指标
     */
    updateEnvironmentMetrics(data) {
        if (!data.sensors) {
            return;
        }

        // 更新湿度（如果有数据的话）
        if (data.summary) {
            // 基于CO2和温度估算湿度
            const estimatedHumidity = this.estimateHumidity(data);
            const humidityValue = document.querySelector('#analysis .humidity-metric .metric-value');
            if (humidityValue) {
                humidityValue.textContent = `${estimatedHumidity}%`;
            }
        }

        // 更新CO2相关（如果需要显示的话）
        if (data.sensors.environment && data.sensors.environment.S5_CO2) {
            const co2Level = data.sensors.environment.S5_CO2;
            // 可以在这里添加CO2显示逻辑
        }

        // 更新最后更新时间
        if (data.timestamp) {
            this.updateTimestamp(data.timestamp);
        }
    }

    /**
     * 估算湿度（基于可用数据）
     */
    estimateHumidity(data) {
        // 这是一个简化的估算，实际项目中应该有真实的湿度传感器
        const temps = data.sensors.temperature;
        const avgTemp = (temps.S1_Temp + temps.S2_Temp + temps.S3_Temp + temps.S4_Temp) / 4;
        
        // 基于温度的简单估算（实际应该用真实传感器）
        let baseHumidity = 60;
        if (avgTemp > 25) {
            baseHumidity = 70 + (avgTemp - 25) * 2;
        } else if (avgTemp < 20) {
            baseHumidity = 50 - (20 - avgTemp) * 2;
        }
        
        return Math.round(Math.max(30, Math.min(90, baseHumidity)));
    }

    /**
     * 更新时间戳显示
     */
    updateTimestamp(timestamp) {
        // 更新时间戳显示
        const timestampEl = document.querySelector('.last-update-time');
        if (timestampEl) {
            const date = new Date(timestamp);
            timestampEl.textContent = `最后更新: ${date.toLocaleTimeString('zh-CN')}`;
        }
    }
}

// 创建全局实例
let realtimeAnalysisUpdater = null;

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function() {
    console.log('[实时分析] 初始化...');
    
    // 创建更新器实例
    realtimeAnalysisUpdater = new RealtimeAnalysisUpdater();
    
    // 监听导航切换
    const navItems = document.querySelectorAll('.nav-item');
    navItems.forEach(item => {
        item.addEventListener('click', function() {
            const section = this.getAttribute('data-section');
            
            if (section === 'analysis') {
                // 切换到数据分析页面，启动更新
                console.log('[实时分析] 切换到数据分析页面，启动自动更新');
                setTimeout(() => {
                    realtimeAnalysisUpdater.start();
                }, 500);
            } else {
                // 切换到其他页面，停止更新
                if (realtimeAnalysisUpdater && realtimeAnalysisUpdater.isActive) {
                    console.log('[实时分析] 离开数据分析页面，停止自动更新');
                    realtimeAnalysisUpdater.stop();
                }
            }
        });
    });
    
    // 如果当前就在数据分析页面，立即启动
    const analysisSection = document.getElementById('analysis');
    if (analysisSection && analysisSection.classList.contains('active')) {
        console.log('[实时分析] 当前在数据分析页面，启动自动更新');
        realtimeAnalysisUpdater.start();
    }
});

// 页面卸载时停止更新
window.addEventListener('beforeunload', function() {
    if (realtimeAnalysisUpdater) {
        realtimeAnalysisUpdater.stop();
    }
});

